package main

import (
	"flag"
	"fmt"
	"os"

	"github.com/fatih/color"
	"github.com/gin-gonic/gin"
	"gtinlian.fun/src/file_reader"
	"gtinlian.fun/src/router"
	"gtinlian.fun/src/utils"
)

func main() {
	// 处理 help 参数
	if len(os.Args) > 1 && (os.Args[1] == "help" || os.Args[1] == "-h" || os.Args[1] == "--help") {
		fmt.Println("使用说明：")
		fmt.Println("  -port 8080 指定服务器监听端口，默认为 80")
		fmt.Println("  -fileDir ./files 指定文件目录路径，默认为 ./files")
		fmt.Println("  -authCode 123456 指定文件上传认证码，默认为空")
		fmt.Println("  -readDir ./files 指定读取文件的目录，默认为当前目录")
		fmt.Println("  -h, --help 显示帮助信息")
		flag.PrintDefaults()
		return
	}
	// 定义端口参数，默认值为 80
	port := flag.Int("port", 80, "服务器监听端口")

	// 定义文件目录参数，默认值为 ./files
	fileDir := flag.String("fileDir", "./files", "文件目录路径")

	// 定义认证码参数，默认值为空
	authCodeParam := flag.String("authCode", "", "文件上传认证码")

	// 定义读取文件的目录参数，默认值为当前目录
	readDir := flag.String("readDir", "./files", "读取文件的目录")

	// 检查并创建 fileDir 目录
	if _, err := os.Stat(*fileDir); os.IsNotExist(err) {
		if err := os.MkdirAll(*fileDir, 0755); err != nil {
			fmt.Printf("创建 fileDir 目录失败: %v\n", err)
			return
		}
	}

	// 检查并创建 readDir 目录
	if _, err := os.Stat(*readDir); os.IsNotExist(err) {
		if err := os.MkdirAll(*readDir, 0755); err != nil {
			fmt.Printf("创建 readDir 目录失败: %v\n", err)
			return
		}
	}

	flag.Parse()

	// Set Gin to release mode
	gin.SetMode(gin.ReleaseMode)
	r := gin.Default()

	// 创建 FileLineReader 实例，传入指定目录
	reader, err := file_reader.NewFileLineReader(*readDir)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	// 设置路由
	router.SetupRoutes(r, *fileDir, *authCodeParam, reader)

	// 使用命令行指定的端口
	serverURL := fmt.Sprintf("http://localhost:%d/", *port)
	color.Green("访问地址: %s", serverURL)

	utils.StartBrowser(serverURL)
	// 启动服务器，监听指定端口
	r.Run(fmt.Sprintf(":%d", *port))
}
